package com.gpj.netty.demo.base;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import io.netty.util.CharsetUtil;
import lombok.extern.slf4j.Slf4j;

/**
 * @className ClientHandler
 * @description TODO
 * @author GPJ
 * @date 2021/2/24 10:34
 * @version 1.0
 **/
@Slf4j
public class ClientHandler extends ChannelInboundHandlerAdapter {
	/**
	 * 当客户端连接服务器完成就会触发该方法
	 * @param ctx 上下文对象, 含有通道channel，管道pipeline
	 */
	@Override
	public void channelActive(ChannelHandlerContext ctx) throws Exception {
		String msg = "你好,我是客户端！";
		ByteBuf buf = Unpooled.copiedBuffer(msg.getBytes(CharsetUtil.UTF_8));
		ctx.writeAndFlush(buf);
	}

	/**
	 * 读取客户端发送的数据
	 * @param ctx 上下文对象, 含有通道channel，管道pipeline
	 * @param msg 就是客户端发送的数据
	 */
	@Override
	public void channelRead(ChannelHandlerContext ctx, Object msg) {
		ByteBuf buf = (ByteBuf) msg;
		log.info("接收到服务端响应的消息:{}", buf.toString(CharsetUtil.UTF_8));
	}

	/**
	 * 处理异常, 一般是需要关闭通道
	 * @param ctx
	 * @param cause
	 */
	@Override
	public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
		ctx.close();
	}
}
